package org.data.replay.service;

import org.data.replay.dto.DataPoint;
import org.data.replay.dto.FaultResultModel;
import org.data.replay.dto.MeasurementResultDTO;
import org.data.replay.dto.ParameterDTO;
import org.data.replay.dto.QueryDataDTO;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 数据回放服务接口
 * 
 * @author DataReplay
 */
public interface DataReplayService {
    
    /**
     * 查询设备列表（通用命名，适用于机组、发动机等）
     * 通过HTTP请求调用第三方平台的设备列表接口
     * 
     * @return 设备编号列表
     */
    List<String> queryEquipmentList();
    
    /**
     * 根据设备编号查询参数列表
     * 通过HTTP请求调用第三方平台的参数查询接口
     * 
     * @param equipmentCode 设备编号（通用命名，适用于机组编号、发动机编号等）
     * @return 参数列表
     */
    List<ParameterDTO> queryParametersByEquipment(String equipmentCode);
    
    /**
     * 查询数据
     * 通过HTTP请求调用第三方平台的数据查询接口
     * 
     * @param request 查询数据请求
     * @return 数据点列表
     */
    Map<String, List<DataPoint>> queryData(QueryDataDTO request);
    
    /**
     * 查询测量数据
     * 通过HTTP请求调用第三方平台的测量数据接口
     * 计算指定时间范围内参数的统计信息（最大值、最小值、平均值、波动值等）
     * 
     * @param request 查询测量数据请求（与queryData接口入参保持一致）
     * @return 测量结果列表
     */
    Map<String, MeasurementResultDTO> queryMeasurement(QueryDataDTO request);
    
    /**
     * 查询故障
     * @param unitCode 设备编号
     * @param starTime 开始时间
     * @param endTime 结束时间
     * @return 故障集合
     */
    List<FaultResultModel> queryFaultInfo(String unitCode, Date starTime, Date endTime);
}
